package demo1;

import java.util.concurrent.TimeUnit;

public class synchronized2 {

    public static void main(String[] args) {

        Integer i2 = 12345;
        Integer i1 = 12345;
        System.out.println(i2 == i1);



        D2 d2 = new D2();
        for (int i = 0; i < 5; i++) {
//            String str = "abc";//字符串常量池，指向同一地址
            String str = new String("abc");//多个地址
            new Thread(()->{
                try {
                    d2.fun2(str);
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
            }).start();
        }
    }
}

class D2{
    public void fun2(String str) throws InterruptedException {
        Integer num = 1;//多次调用指向同一地址。在 Java 中，对于 Integer 类型，当值在 -128 到 127 之间时，Java 会对这些小范围的整数进行缓存。这意味着如果创建多个值在这个范围内的 Integer 对象，它们可能会指向同一个内存地址，从而节省内存空间。
//        Integer num = 128;//不同对象，不同地址
//        Object o = new Object();//不同对象，不同地址
        synchronized (str){
            System.out.println(Thread.currentThread().getName()+" start");
            TimeUnit.SECONDS.sleep(1);
            System.out.println(Thread.currentThread().getName()+" end");
        }
    }
}


